{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Face Recognition\n",
    "\n",
    "    CNN is trained on AT&T dataset. Dropout was tried to reduce overfitting- dropout layer after pooling layer and fully connected layer.\n",
    "    \n",
    "    CNN Architecture: conv layer 1 = 300 neurons, conv layer 2 = 300 neurons, fully connected layer = 300 neurons\n",
    "        \n",
    "    Results on test set:    \n",
    "               Precision   Recall      F1\n",
    "    without dropout  0.77      0.62      0.64\n",
    "    20% dropout      0.83      0.76      0.76"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  Import packages"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import warnings\n",
    "warnings.filterwarnings('ignore')\n",
    "\n",
    "import numpy as np\n",
    "import cv2\n",
    "import tensorflow as tf\n",
    "import matplotlib.pyplot as plt\n",
    "from time import time\n",
    "import os"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prepare data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Each image is resized to (64, 64)\n"
     ]
    }
   ],
   "source": [
    "# Handle resizing of images, while maintaing aspect ratio\n",
    "def resize_image(image, h, w):\n",
    "\n",
    "    old_width = image.shape[1]\n",
    "    old_height = image.shape[0]\n",
    "    dH, dW = 0, 0\n",
    "    \n",
    "    if old_width < old_height:  #width is smaller, resize along width and compute new height\n",
    "        aspect_r = w / old_width  #aspect ratio\n",
    "        new_height = int(old_height * aspect_r)\n",
    "        new_dim = (w, new_height)\n",
    "        resized_img = cv2.resize(image, new_dim, interpolation = cv2.INTER_AREA)\n",
    "        #dimensions of above image are: (new_height, desired_width). \n",
    "        #Since images in our dataset might be of diff. sizes, such resized images will end up being different sizes\n",
    "        #hence crop the image as follows to make each image of size(desired_height, desired_width)\n",
    "        dH = int((resized_img.shape[0] - h)/2.0)\n",
    "        \n",
    "    else:   #height is smaller, resize along height and compute new width\n",
    "        aspect_r = h / old_height  #aspect ratio\n",
    "        new_width = int(old_width * aspect_r)\n",
    "        new_dim = (new_width, h)\n",
    "        resized_img = cv2.resize(image, new_dim, interpolation = cv2.INTER_AREA)\n",
    "        dW = int((resized_img.shape[1] - w)/2.0)\n",
    "        \n",
    "    new_h, new_w = resized_img.shape[:2]\n",
    "    cropped_image = resized_img[dH:new_h - dH, dW:new_w - dW]  #dimensions of this image = desired dimensions\n",
    "    #Make sure that the image is resized to desired dimensions\n",
    "    return cv2.resize(cropped_image, (h, w), interpolation = cv2.INTER_AREA)  \n",
    "\n",
    "#All images provided to the classifier should have fixed and equal sizes\n",
    "dim = (64, 64)\n",
    "\n",
    "print(\"Each image is resized to {}\".format(dim))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Subject 0, 10 images loaded\n",
      "Subject 1, 10 images loaded\n",
      "Subject 2, 10 images loaded\n",
      "Subject 3, 10 images loaded\n",
      "Subject 4, 10 images loaded\n",
      "Subject 5, 10 images loaded\n",
      "Subject 6, 10 images loaded\n",
      "Subject 7, 10 images loaded\n",
      "Subject 8, 10 images loaded\n",
      "Subject 9, 10 images loaded\n",
      "Subject 10, 10 images loaded\n",
      "Subject 11, 10 images loaded\n",
      "Subject 12, 10 images loaded\n",
      "Subject 13, 10 images loaded\n",
      "Subject 14, 10 images loaded\n",
      "Subject 15, 10 images loaded\n",
      "Subject 16, 10 images loaded\n",
      "Subject 17, 10 images loaded\n",
      "Subject 18, 10 images loaded\n",
      "Subject 19, 10 images loaded\n",
      "Subject 20, 10 images loaded\n",
      "Subject 21, 10 images loaded\n",
      "Subject 22, 10 images loaded\n",
      "Subject 23, 10 images loaded\n",
      "Subject 24, 10 images loaded\n",
      "Subject 25, 10 images loaded\n",
      "Subject 26, 10 images loaded\n",
      "Subject 27, 10 images loaded\n",
      "Subject 28, 10 images loaded\n",
      "Subject 29, 10 images loaded\n",
      "Subject 30, 10 images loaded\n",
      "Subject 31, 10 images loaded\n",
      "Subject 32, 10 images loaded\n",
      "Subject 33, 10 images loaded\n",
      "Subject 34, 10 images loaded\n",
      "Subject 35, 10 images loaded\n",
      "Subject 36, 10 images loaded\n",
      "Subject 37, 10 images loaded\n",
      "Subject 38, 10 images loaded\n",
      "Subject 39, 10 images loaded\n"
     ]
    }
   ],
   "source": [
    "#All images provided to the classifier should have fixed and equal sizes\n",
    "dim = (64, 64)\n",
    "\n",
    "def fetch_subject_images(path_to_subject, subject_number):\n",
    "    X = np.array([])\n",
    "    index = 0\n",
    "    for subject_img in os.listdir(path_to_subject): #for each image in this subject's folder\n",
    "        img_path = os.path.join(path_to_subject, subject_img)\n",
    "        if img_path.endswith(\".pgm\") or img_path.endswith(\".png\") or img_path.endswith(\".jpg\") or img_path.endswith(\".jpeg\"):\n",
    "            #Read image, convert it to grayscale and resize every image to a fixed size  \n",
    "            img = cv2.resize(cv2.imread(img_path, 0), dim, interpolation = cv2.INTER_AREA) \n",
    "            \n",
    "            img_data = img[np.newaxis, :, :]\n",
    "            X = img_data if not X.shape[0] else np.vstack((X, img_data))\n",
    "            index += 1\n",
    "\n",
    "    y = np.empty(index, dtype = int) #index = total no. of samples\n",
    "    y.fill(subject_number)  #add labels\n",
    "    return X, y\n",
    "\n",
    "def fetch_data(dataset_path):\n",
    "\n",
    "    # Get a the list of folder names in the path to dataset\n",
    "    labels_list = [d for d in os.listdir(dataset_path) if \".\" not in str(d)]\n",
    "\n",
    "    X = np.empty([0, dim[0], dim[1]])\n",
    "    y = np.empty([0])\n",
    "\n",
    "    for i in range(0, len(labels_list)):  #for each person\n",
    "        subject = str(labels_list[i])  #person i in list of ppl\n",
    "        path_to_subject = os.path.join(dataset_path, subject) #full path to this person's directory\n",
    "        \n",
    "        #Read all images in this folder (all images of this person)\n",
    "        X_, y_ = fetch_subject_images(path_to_subject, i)\n",
    "        X = np.concatenate((X, X_), axis=0)\n",
    "        y = np.append(y, y_)\n",
    "        print(\"Subject {}, {} images loaded\".format(i, X_.shape[0]))\n",
    "\n",
    "    return X, y, labels_list\n",
    "\n",
    "# Load training data \n",
    "dataset_path = \"att_faces/\"\n",
    "X_face, y_face, labels_list  = fetch_data(dataset_path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import re\n",
    "q = labels_list\n",
    "def stringSplitByNumbers(x):\n",
    "    r = re.compile('(\\d+)')\n",
    "    l = r.split(x)\n",
    "    return [int(y) if y.isdigit() else y for y in l]\n",
    "\n",
    "labels_list_faces = sorted(q, key = stringSplitByNumbers)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#  Split into training and test sets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dataset consists of 400 samples and  40 classes\n",
      "Data: (400, 64, 64) and labels: (400, 40)\n",
      " \n",
      "Training data (320, 64, 64), test data (80, 64, 64)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import OneHotEncoder\n",
    "\n",
    "n_classes = len(np.unique(y_face))\n",
    "encoder = OneHotEncoder()\n",
    "labels = encoder.fit_transform(np.reshape(y_face, (-1, 1))).toarray()\n",
    "\n",
    "print(\"Dataset consists of {} samples and  {} classes\".format(X_face.shape[0], n_classes))\n",
    "print(\"Data: {} and labels: {}\".format(X_face.shape, labels.shape))                                                                                           \n",
    "print(\" \")\n",
    "X_train, X_test, y_train, y_test = train_test_split(X_face, labels, test_size=0.20, random_state=42)\n",
    "print(\"Training data {}, test data {}\".format(X_train.shape, X_test.shape))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#  CNN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# tf.reset_default_graph()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "EPOCH 0\n",
      "Train accuracy = 0.03125, train loss = 18.664731979370117\n",
      "Validation loss: 20.491397857666016, minimum loss: 20.491397857666016, validation accuracy: 0.012500000186264515\n",
      " \n",
      "EPOCH 1\n",
      "Train accuracy = 0.578125, train loss = 2.4405245780944824\n",
      "Validation loss: 3.206329822540283, minimum loss: 3.206329822540283, validation accuracy: 0.23749999701976776\n",
      " \n",
      "EPOCH 2\n",
      "Train accuracy = 0.75, train loss = 1.2574214935302734\n",
      "Validation loss: 2.4252657890319824, minimum loss: 2.4252657890319824, validation accuracy: 0.38749998807907104\n",
      " \n",
      "EPOCH 3\n",
      "Train accuracy = 0.984375, train loss = 0.1927013099193573\n",
      "Validation loss: 1.4232605695724487, minimum loss: 1.4232605695724487, validation accuracy: 0.625\n",
      " \n",
      "EPOCH 4\n",
      "Train accuracy = 1.0, train loss = 0.008628503419458866\n",
      "Validation loss: 1.9719295501708984, minimum loss: 1.4232605695724487, validation accuracy: 0.675000011920929\n",
      " \n",
      "EPOCH 5\n",
      "Train accuracy = 1.0, train loss = 0.0006661373190581799\n",
      "Validation loss: 2.13396954536438, minimum loss: 1.4232605695724487, validation accuracy: 0.6625000238418579\n",
      " \n",
      "EPOCH 6\n",
      "Train accuracy = 1.0, train loss = 0.002454130444675684\n",
      "Validation loss: 1.9916836023330688, minimum loss: 1.4232605695724487, validation accuracy: 0.737500011920929\n",
      " \n",
      "EPOCH 7\n",
      "Train accuracy = 1.0, train loss = 0.003840939374640584\n",
      "Validation loss: 2.186890125274658, minimum loss: 1.4232605695724487, validation accuracy: 0.637499988079071\n",
      " \n",
      "EPOCH 8\n",
      "Train accuracy = 1.0, train loss = 0.0009925724007189274\n",
      "Validation loss: 2.1726438999176025, minimum loss: 1.4232605695724487, validation accuracy: 0.7124999761581421\n",
      " \n",
      "EPOCH 9\n",
      "Train accuracy = 1.0, train loss = 0.00027715566102415323\n",
      "Validation loss: 2.3656973838806152, minimum loss: 1.4232605695724487, validation accuracy: 0.75\n",
      " \n",
      "EPOCH 10\n",
      "Train accuracy = 1.0, train loss = 0.00013070930435787886\n",
      "Validation loss: 2.2878310680389404, minimum loss: 1.4232605695724487, validation accuracy: 0.75\n",
      " \n",
      "EPOCH 11\n",
      "Train accuracy = 1.0, train loss = 1.8209371773991734e-05\n",
      "Validation loss: 2.1427695751190186, minimum loss: 1.4232605695724487, validation accuracy: 0.7749999761581421\n",
      " \n",
      "EPOCH 12\n",
      "Train accuracy = 1.0, train loss = 0.0009658520575612783\n",
      "Validation loss: 2.4377200603485107, minimum loss: 1.4232605695724487, validation accuracy: 0.6875\n",
      " \n",
      "EPOCH 13\n",
      "Train accuracy = 1.0, train loss = 0.0010015928419306874\n",
      "Validation loss: 2.157728433609009, minimum loss: 1.4232605695724487, validation accuracy: 0.6875\n",
      " \n",
      "EPOCH 14\n",
      "Train accuracy = 1.0, train loss = 0.0039496952667832375\n",
      "Validation loss: 2.030198574066162, minimum loss: 1.4232605695724487, validation accuracy: 0.7124999761581421\n",
      " \n",
      "EPOCH 15\n",
      "Train accuracy = 1.0, train loss = 0.0013681624550372362\n",
      "Validation loss: 2.011387348175049, minimum loss: 1.4232605695724487, validation accuracy: 0.7124999761581421\n",
      " \n",
      "EPOCH 16\n",
      "Train accuracy = 1.0, train loss = 0.0009671014850027859\n",
      "Validation loss: 2.0596656799316406, minimum loss: 1.4232605695724487, validation accuracy: 0.7250000238418579\n",
      " \n",
      "EPOCH 17\n",
      "Train accuracy = 1.0, train loss = 7.390803511952981e-05\n",
      "Validation loss: 2.141594409942627, minimum loss: 1.4232605695724487, validation accuracy: 0.75\n",
      " \n",
      "EPOCH 18\n",
      "Train accuracy = 1.0, train loss = 5.950938430032693e-05\n",
      "Validation loss: 2.216803789138794, minimum loss: 1.4232605695724487, validation accuracy: 0.762499988079071\n",
      " \n",
      "EPOCH 19\n",
      "Train accuracy = 1.0, train loss = 5.904411409574095e-06\n",
      "Validation loss: 2.26283597946167, minimum loss: 1.4232605695724487, validation accuracy: 0.762499988079071\n",
      " \n",
      "EPOCH 20\n",
      "Train accuracy = 1.0, train loss = 1.1527168680913746e-05\n",
      "Validation loss: 2.283310890197754, minimum loss: 1.4232605695724487, validation accuracy: 0.7875000238418579\n",
      " \n",
      "EPOCH 21\n",
      "Train accuracy = 1.0, train loss = 7.107637884473661e-06\n",
      "Validation loss: 2.2942357063293457, minimum loss: 1.4232605695724487, validation accuracy: 0.7875000238418579\n",
      " \n",
      "EPOCH 22\n",
      "Train accuracy = 1.0, train loss = 3.6506967262539547e-06\n",
      "Validation loss: 2.2956154346466064, minimum loss: 1.4232605695724487, validation accuracy: 0.7875000238418579\n",
      " \n",
      "EPOCH 23\n",
      "Train accuracy = 1.0, train loss = 5.425667950476054e-06\n",
      "Validation loss: 2.295135021209717, minimum loss: 1.4232605695724487, validation accuracy: 0.7875000238418579\n",
      " \n",
      "EPOCH 24\n",
      "Train accuracy = 1.0, train loss = 1.842144001784618e-06\n",
      "Validation loss: 2.2947916984558105, minimum loss: 1.4232605695724487, validation accuracy: 0.7875000238418579\n",
      " \n",
      "EPOCH 25\n",
      "Train accuracy = 1.0, train loss = 1.2684452030953253e-06\n",
      "Validation loss: 2.29457950592041, minimum loss: 1.4232605695724487, validation accuracy: 0.7875000238418579\n",
      " \n",
      "EPOCH 26\n",
      "Train accuracy = 1.0, train loss = 3.4234933536936296e-06\n",
      "Validation loss: 2.2939043045043945, minimum loss: 1.4232605695724487, validation accuracy: 0.7875000238418579\n",
      " \n",
      "EPOCH 27\n",
      "Train accuracy = 1.0, train loss = 2.877762426578556e-06\n",
      "Validation loss: 2.2936079502105713, minimum loss: 1.4232605695724487, validation accuracy: 0.7875000238418579\n",
      " \n",
      "EPOCH 28\n",
      "Train accuracy = 1.0, train loss = 7.254668162204325e-06\n",
      "Validation loss: 2.2934353351593018, minimum loss: 1.4232605695724487, validation accuracy: 0.7875000238418579\n",
      " \n",
      "EPOCH 29\n",
      "Train accuracy = 1.0, train loss = 1.858870518844924e-06\n",
      "Validation loss: 2.2931160926818848, minimum loss: 1.4232605695724487, validation accuracy: 0.7875000238418579\n",
      " \n",
      "EPOCH 30\n",
      "Train accuracy = 1.0, train loss = 3.205564098607283e-06\n",
      "Validation loss: 2.2927041053771973, minimum loss: 1.4232605695724487, validation accuracy: 0.7875000238418579\n",
      " \n",
      "EPOCH 31\n",
      "Train accuracy = 1.0, train loss = 3.6171434203424724e-06\n",
      "Validation loss: 2.2924187183380127, minimum loss: 1.4232605695724487, validation accuracy: 0.7875000238418579\n",
      " \n",
      "EPOCH 32\n",
      "Train accuracy = 1.0, train loss = 1.396969082634314e-06\n",
      "Validation loss: 2.2921741008758545, minimum loss: 1.4232605695724487, validation accuracy: 0.7875000238418579\n",
      " \n",
      "EPOCH 33\n",
      "Train accuracy = 1.0, train loss = 1.8793807612382807e-06\n",
      "Validation loss: 2.2922275066375732, minimum loss: 1.4232605695724487, validation accuracy: 0.7875000238418579\n",
      " \n",
      "** EARLY STOPPING ** \n",
      "Training took 22.919357 minutes\n",
      "INFO:tensorflow:Restoring parameters from ./face_rec_CNNmodel1.1\n",
      "Final test accuracy = 0.625\n"
     ]
    }
   ],
   "source": [
    "width = 64\n",
    "height = 64\n",
    "\n",
    "n_features = height*width\n",
    "channels = 1\n",
    "\n",
    "feature_map1 = 300\n",
    "ksize_conv1 = 2\n",
    "stride_conv1 = 1\n",
    "\n",
    "feature_map2 = 300\n",
    "ksize_conv2 = ksize_conv1\n",
    "stride_conv2 = stride_conv1\n",
    "\n",
    "pool_layer_maps2 = feature_map2\n",
    "\n",
    "n_fully_conn1 = 300\n",
    "  \n",
    "X = tf.placeholder(tf.float32, shape=[None, height, width])\n",
    "X_reshaped = tf.reshape(X, shape=[-1, height, width, channels])\n",
    "y = tf.placeholder(tf.int32, shape=[None, n_classes])\n",
    "\n",
    "xavier_init = tf.contrib.layers.xavier_initializer()\n",
    "relu_act = tf.nn.relu\n",
    "\n",
    "# ------------------ Convolutional and pooling layers ----------------------------\n",
    "\n",
    "def convolutional_layer(X, filter_, ksize, kernel_init, strides, padding):\n",
    "    convolutional_layer = tf.layers.conv2d(X, filters = filter_, kernel_initializer = kernel_init,\n",
    "                                           kernel_size = ksize, strides = strides,\n",
    "                                          padding = padding, activation = relu_act)\n",
    "    return convolutional_layer\n",
    "\n",
    "def pool_layer(convlayer, ksize, strides, padding, pool_maps):\n",
    "    pool = tf.nn.max_pool(convlayer, ksize, strides, padding)\n",
    "    dim1, dim2 = int(pool.get_shape()[1]), int(pool.get_shape()[2])\n",
    "    pool_flat = tf.reshape(pool, shape = [-1, pool_maps * dim1 * dim2])\n",
    "    return pool_flat\n",
    "\n",
    "conv_layer1 = convolutional_layer(X_reshaped, feature_map1, ksize_conv1, xavier_init, stride_conv1, padding = \"SAME\")\n",
    "\n",
    "conv_layer2 = convolutional_layer(conv_layer1, feature_map2, ksize_conv2, xavier_init, stride_conv2, padding = \"SAME\")\n",
    "\n",
    "pool_layer2_flat = pool_layer(conv_layer2, [1,2,2,1], [1,2,2,1], \"VALID\", pool_layer_maps2)\n",
    "\n",
    "# ----------------- Fully connected layer -------------------\n",
    "\n",
    "def dense_layer(input_layer, n_neurons, kernel_init, activation):\n",
    "    fully_conn = tf.layers.dense(inputs = input_layer, units = n_neurons, activation = activation,\n",
    "                                kernel_initializer = kernel_init)\n",
    "    return fully_conn\n",
    "        \n",
    "dense_layer1 = dense_layer(pool_layer2_flat, n_fully_conn1, xavier_init, relu_act)\n",
    "\n",
    "#--------------------------------------------------------------\n",
    "\n",
    "logits = tf.layers.dense(dense_layer1, n_classes)\n",
    "\n",
    "prediction = tf.nn.softmax(logits)\n",
    "\n",
    "xentropy = tf.nn.softmax_cross_entropy_with_logits(labels = y, logits = logits)\n",
    "loss = tf.reduce_mean(xentropy)\n",
    "\n",
    "optimizer = tf.train.AdamOptimizer(0.001)\n",
    "train_step = optimizer.minimize(loss)\n",
    "\n",
    "correct_preds = tf.equal(tf.argmax(prediction,1), tf.argmax(y, 1))\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_preds, tf.float32))\n",
    "\n",
    "saver = tf.train.Saver()\n",
    "\n",
    "n_epochs = 100\n",
    "batch_size = 64\n",
    "n_train = X_train.shape[0]\n",
    "n_iter = n_train//batch_size\n",
    "path = \"./face_rec_CNNmodel1.1\"\n",
    "\n",
    "train_loss_log, train_acc_log, val_loss_log, val_acc_log = ([] for i in range (4))\n",
    "\n",
    "sess = tf.InteractiveSession()\n",
    "init = tf.global_variables_initializer()\n",
    "init.run()\n",
    "\n",
    "#initialize variables for early stopping\n",
    "min_loss = np.infty\n",
    "epochs_without_improvement = 0 \n",
    "max_epochs_without_improvement = 30 \n",
    "\n",
    "start = time()\n",
    "for epoch in range(n_epochs):\n",
    "    for iteration in range(n_iter):\n",
    "        rand_indices = np.random.choice(n_train, batch_size, replace = False)    \n",
    "        X_batch, y_batch = X_train[rand_indices], y_train[rand_indices]\n",
    "        sess.run(train_step, feed_dict={X: X_batch, y: y_batch})\n",
    "        \n",
    "    train_loss, train_acc = sess.run([loss, accuracy], feed_dict={X: X_batch, y: y_batch})\n",
    "    train_loss_log.append(train_loss)\n",
    "    train_acc_log.append(train_acc)\n",
    "\n",
    "    val_loss, val_acc, y_pred = sess.run([loss, accuracy, prediction], feed_dict={X: X_test, y: y_test})\n",
    "    val_loss_log.append(val_loss)\n",
    "    val_acc_log.append(val_acc)\n",
    "        \n",
    "    # Early stopping \n",
    "        \n",
    "    if val_loss < min_loss:\n",
    "        save_path = saver.save(sess, path)\n",
    "        min_loss = val_loss\n",
    "        epochs_without_improvement = 0\n",
    "    else:\n",
    "        epochs_without_improvement += 1\n",
    "        if epochs_without_improvement > max_epochs_without_improvement:\n",
    "            print(\"** EARLY STOPPING ** \")\n",
    "            break\n",
    "    print(\"EPOCH {}\".format(epoch))\n",
    "    print(\"Train accuracy = {}, train loss = {}\".format(train_acc, train_loss))\n",
    "    print(\"Validation loss: {}, minimum loss: {}, validation accuracy: {}\".format(val_loss, min_loss, val_acc))\n",
    "    print(\" \")\n",
    "    \n",
    "print(\"Training took %f minutes\"%(float(time() - start)/60.0))\n",
    "\n",
    "saver.restore(sess, path)\n",
    "acc_test = accuracy.eval(feed_dict={X: X_test, y: y_test})\n",
    "print(\"Final test accuracy = {}\".format(acc_test))\n",
    "\n",
    "y_predicted = logits.eval(feed_dict = {X : X_test})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  Inspect learning curves"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtwAAAJwCAYAAAC6d7b8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl0VPX9//HnvZOEbIMQDUsSAdkSGPaAIihgpFAXEAVi\nKfqDr63QKlqwIoggQi1EkUURcWurxQXiAriiVZQWBRcMigGCiKAQNokRspHJzP39EWbMmIRswwyB\n1+Ocns7Mvfdz3/Mm5/jOJ+/7+RiWZVmIiIiIiMgpYQY7ABERERGRM5kKbhERERGRU0gFt4iIiIjI\nKaSCW0RERETkFFLBLSIiIiJyCqngFhERERE5hVRwi4jUM3v27ME0TT7++ONghyIiItWggltE5Ff+\n7//+j0GDBgU7jEq1aNGCAwcOcNFFFwXsnm+99RZXXHEF5513HpGRkXTo0IE///nPfPPNNwGLQUSk\nvlLBLSJymigpKanWeYZh0KRJE2w22ymOqNTs2bMZOnQobdu2ZeXKlWRlZfHPf/6TBg0aMGPGjDqN\n7XQ6/RSliMjpSwW3iEgNuVwu7rvvPlq3bk1ERASdO3fmySef9DnnkUceoXv37tjtdpo3b86oUaM4\ncOCA9/i6deswTZO33nqLSy+9lMjISP7xj3/w7LPPEhoayscff0xycjJRUVH07NmTzz//3Hvtr1tK\nPO9feuklhg4dSlRUFG3atOHZZ5/1iWn37t0MGjSIiIgIWrVqxWOPPcZll13GuHHjKv2umzZt4r77\n7mPu3LksXryYSy+9lPPPP5+LL76YRYsW8cQTT/h8n+zsbJ/rQ0ND+fe//+0T5wsvvMBVV12F3W7n\nnnvuoWXLlqSlpflcV1xcTExMDP/85z+9ny1evJgOHToQERFBYmIic+bMweVyeY+vXr2aHj16EBUV\nRePGjenduzdffvll5f+QIiIBooJbRKSG/vCHP7Bq1Sqeeuoptm/fzr333svUqVP517/+5T3HMAzm\nz5/P119/zapVq/jhhx8YNWpUubHuvPNOpk6dyrZt2xgyZAgAbrebadOmsXjxYjIyMmjSpAnXX389\nbrfbZ/xfu/vuuxkzZgxbtmzhd7/7HX/84x/ZuXOn9/iwYcM4duwY69ev57XXXuPNN98kIyPjpN91\n2bJlREVFMWnSpAqPn3POOSeNqSJTp05l9OjRfP3119x6662MHj2aZcuW+ZyzatUqiouLSU1NBeC+\n++5jwYIFPPDAA2zfvp2HH36YJ598ktmzZwNw8OBBUlNTGT16NFu3bmXjxo1MnDiRkJCQasUkInJK\nWSIi4mPs2LHWb37zmwqPfffdd5ZpmlZWVpbP57Nnz7a6detW6ZhffPGFZZqmlZ2dbVmWZX344YeW\nYRjW888/73PeM888Y5mmaW3evNn72SeffGKZpmnt2LHDsizL2r17t2UYhvXRRx/5vF+0aJH3GpfL\nZdntduvJJ5+0LMuy3n33Xcs0TWvXrl3ec3JycqzIyEjr5ptvrjTuK6+80uratWulxz0+/PBDyzRN\na9++fT6fh4SEWM8++6xPnH//+999ztm+fbtlmqb1+eefez+7+uqrrd///veWZVlWQUGBFRkZab3z\nzjs+1/373/+2GjVqZFmWZWVkZFimaVp79uypMlYRkUDTr/4iIjXw+eefY1kWPXv2xLIs7+clJSWE\nhoZ633/44YekpaWxdetWcnNzvbPTe/bsoXnz5kDpjHCvXr3K3cMwDLp06eJ9HxcXh2VZHDx4kHbt\n2lUaW9euXb2vTdOkSZMmHDx4EIBt27Zx3nnnccEFF3jPady4MYmJiSf9vpZlVXvmurp+/Z0TExPp\n2bMny5YtIzk5mUOHDvHOO+/w5ptvApCZmUlhYSHDhw/3uc7lclFcXMyRI0fo0qULgwYNwuFw8Jvf\n/IYBAwZw3XXXkZCQ4NfYRURqQy0lIiI14Ha7MQyDDRs28OWXX3r/l5mZ6e0X/uGHH7jqqqto3bo1\nK1asYNOmTbz22mtYlkVxcbHPeFFRUeXuYZqmT5HreV22paQiYWFhPu8Nw6iyDaUqiYmJ7Ny5s8oH\nOk2z9D8nZX8JcbvdFcZc0XceM2YMy5cvx+Vy8cILLxAbG8vAgQO94wC8/PLLPjn/+uuv2bFjBzEx\nMZimydtvv80HH3zAhRdeyCuvvEL79u156623avydRUT8TQW3iEgNJCcnA6Uz1a1bt/b5n2f2+LPP\nPqOoqIiFCxdy8cUX065dOw4cOOD3meKa6NixI4cPH2bXrl3ez3766Sd27Nhx0utuuOEGCgoKWLBg\nQYXHc3NzAWjSpAmWZfk8NJmRkeFTgJ/MqFGj+Pnnn3n77bdZtmwZN9xwgzdfDoeD8PBwvv3223I5\nb926tU9ee/bsydSpU1m3bh39+/f36asXEQkWtZSIiFQgLy+v3AoX4eHhJCYm8n//93/cfPPNPPDA\n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\n66+/HoDx48fTvXt3OnbsyIgRI9ixY4d3nEmTJjFv3jwANmzYQM+ePXniiSfo2rUrycnJrFixotIY\nVqxYwYABA0hMTKRv374899xzPsffeecdBg0aRFJSEn379mXdunUA5Obmcscdd5CcnIzD4eCPf/wj\nAOnp6Vx77bU+YyQkJLBnzx5vrHfffTc33ngj7du35+OPP+b9999n8ODBJCUlceGFF7JgwQKf6z/9\n9FOuueYaOnbsyIUXXshLL73El19+Sbdu3XC7f6m13nzzTQYNGlSjf4P6KGAz3AANGjQASme7XS5X\nuePvvfcegwcPJjIyEoCGDRsGLjitUiIiIiJVeOSRR/j000+ZP38+ffv2BWDv3r0AbNy4kXXr1nln\nf1NSUli0aBEhISH8/e9/Z8KECbz77rsVjnv48GHy8/P54osvWLduHePGjeOKK66osBaKjY1l2bJl\nnH/++XzyySeMHj2abt260alTJzIyMpg4cSJPPfUUl1xyCQcPHiQvLw+A2267DbvdzocffkhkZCSf\nf/65d0zDMHzu8ev3q1evZtmyZSQnJ1NcXMwXX3zBI488QmJiItu3b2fUqFF06tSJQYMGsW/fPm68\n8UbmzZvHVVddxbFjx8jOzqZjx47ExMTw3//+lwEDBgCwcuXKCjsezjQBLbjdbjdTp07l4MGDDB48\nmLZt2/oc379/PwAzZszAsixGjBhBt27dAhPciZYS9XCLiIic/uLj4/wyzr592bW6zvrVIguGYXDn\nnXcSERHh/cwz0w2ls8RPP/00eXl5REdHlxsvNDSUiRMnYpomKSkpREVF8e2339K9e/dy56akpHhf\nX3TRRfTv359PP/2UTp06sXz5cn73u99xySWXANC0aVOaNm3KoUOHWLduHZmZmdjtdu+11f1+gwYN\nIjk5GYCwsDB69+7tPZaUlMTQoUPZsGEDgwYNYuXKlfTr14+hQ4cC0KhRIxo1agTAiBEjeOWVVxgw\nYAA//fQTH374IXPnzq00jjNFQAtu0zR58MEHKSgoYN68ed4/wXi4XC4OHDjArFmz+PHHH5k5cybz\n58/3znif4uDUwy0iIlJP1LZQPpWaN2/ufe12u0lLS+PNN98kJycHwzAwDIOcnJwKC+7GjRv79EVH\nRESQn59f4X3Wrl3LwoUL2bVrF5ZlUVRURIcOHQDIzs7m8ssvL3dNdnY2jRo18hbbNRUX5/sLTkZG\nBnPmzCErKwun00lxcTFXX321914tW7ascJzrrruOyy67jMLCQl5//XV69+5NbGxsrWKqTwJacHtE\nRkbicDjYvHmzT8F97rnn0r59e0zTpEmTJsTFxXHgwAFat27tc31mZiaZmZne96mpqbX+AfIIjYjA\nZtgIbxCGrY5jnW3CwsLqnH+pPeU/eJT74FL+gycQuT+dHzr8dbtFRZ+vXLmS//znP6SnpxMfH8/R\no0fp2LFjuZnjmiouLmbcuHEsXryYwYMHY5omf/jDH7zjxsXFeXuvy4qLiyM3N5djx46V+7eLjIyk\nsLDQ+/7QoUMn/W4AEyZM4KabbuKFF17wPqf3008/ee+1efPmCuNv1qwZycnJvPXWW7z66quMGTOm\nZgkIIJvNVunPeXp6uve1w+HA4XCcdKyAFdxHjx4lJCSEyMhIiouL2bJlC9dcc43POb169eKjjz6i\nf//+HD16lP3799OkSZNyY1X0xY4dO1an+OxOJ0aJm6KiAgrqONbZxm631zn/UnvKf/Ao98Gl/AdP\nIHJ/Ov8yFRsby/fff+/z2a8L6by8PMLCwjjnnHMoKChg7ty5lRbqNeF0OnE6ncTExGCaJmvXrmXd\nunUkJSUBMGrUKEaPHs3AgQPp06ePt4e7bdu2XHbZZUybNo3777+fqKgoNm3axEUXXUTHjh3ZsWMH\nW7dupU2bNixYsKDKWPPz8znnnHMIDQ0lIyODVatW0b9/fwCuvfZaHn30Ud544w2uuOIKjh49SnZ2\ntrd2Gz58OEuWLGHfvn389re/rXNOThWXy1Xhz7ndbic1NbVGYwVslZLc3FxmzZrF5MmTmTZtGl27\ndqVHjx6kp6ezadMmALp164bdbueOO+7gb3/7GzfeeGOFf3Y5JTwtJWjjGxEREanchAkTWLRoEQ6H\ngyeeeAIoPwM8cuRI4uPjSU5OJiUlhZ49e9boHpUVvFFRUcyePZvx48fjcDhYvXo1gwcP9h7v1q0b\nCxYsYObMmSQlJTFixAiys0vbbx555BFsNhv9+/ena9euPP300wC0bt2aiRMncv3113PppZeetLfb\nY86cOcybN4+kpCQefvhhb782QHx8PMuWLePxxx/H4XAwePBgtm3b5j3+29/+lr1793LFFVf49Lyf\nyQyrrn/bOE14fphqy/7QQzRo8QGFfYaTn3CTn6I6O2iWKbiU/+BR7oNL+Q+eQM1w69/3zNW3b18e\neOAB78Odp6PKfgZ/3c9eHVq1/ATvxjdapURERETklHnzzTcxDOO0Lrb9LSgPTZ6WDKO01tYqJSIi\nIiKnxIj8clUdAAAgAElEQVQRI9i5cyePPPJIsEMJKBXcHjabZrhFRERETqGXX3452CEEhVpKPLzr\ncJ8RLe0iIiIicppQwe2hnSZFRERE5BRQwX2CZZrq4RYRERERv1PB7WEY6uEWEREREb9Twe2hGW4R\nEREROQVUcHt4VynRQ5MiIiLifxs2bPDZcTIlJYWNGzdW69yamjp1Kg8//HCtrxf/0rKAJ1imCSUW\nhma4RURE5BQpu2X72rVrq33uyaSnp/Piiy+ycuVK72dpaWm1C1BOCc1we6iHW0REROohy7KqXZzX\ndy6XK9gh1IoKbg/1cIuIiEgVlixZwrhx43w+u/fee7n33nsBWLFiBQMGDCAxMZG+ffvy3HPPVTpW\n7969Wb9+PQBFRUVMnDgRh8NBSkoKX375Zbn79u3bl8TERFJSUlizZg0AO3fuZNq0aWzatIn27dvj\ncDgAmDRpEvPmzfNe//zzz9O3b186derETTfdxMGDB73HEhISWLZsGZdccgkOh4N77rmn0pg3b97M\n0KFD6dixI8nJyUyfPp2SkhLv8aysLEaNGoXD4aB79+48+uijALjdbh555BHvd7jyyivZv38/e/fu\nJSEhAbf7l/prxIgRLF++HCidvR82bBj33XcfDoeDBQsWsGfPHlJTU+nUqRNdunThtttu49ixY97r\ns7Ozufnmm+nSpQudO3dmxowZFBcX43A4yMrK8p535MgR2rRpQ05OTqXf119UcHt4Nr5RD7eIiIhU\nYtiwYXzwwQfk5+cDpYXkG2+8wXXXXQdAbGwsy5YtIysriwULFnDffffx9ddfVznuggUL+OGHH9iw\nYQPPP/88L730ks/xVq1asWrVKrKyspg0aRK33XYbhw8fpm3btsydO5fk5GR27NhBZmZmubHXr19P\nWloaTz75JBkZGcTHx3PLLbf4nPP++++zZs0a3n33XV5//XXWrVtXYZw2m41Zs2aRmZnJa6+9xkcf\nfcSzzz4LQH5+PqNGjSIlJYWMjAw++ugjLrnkEgCeeOIJXnvtNZ577jmysrKYP38+ERERQNWtMxkZ\nGbRq1YotW7Zw++23Y1kWt912G5s3b+bDDz9k//79zJ8/Hyj99xgzZgznn38+n376KZs2bWLo0KGE\n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\nETnQ/wMKFVSul56ntAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc5f01ac198>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#plot the training + testing loss and accuracy\n",
    "%matplotlib inline\n",
    "plt.style.use(\"ggplot\")\n",
    "plt.figure()\n",
    "\n",
    "num_epochs_trained = len(train_loss_log)\n",
    "plt.plot(np.arange(0, num_epochs_trained), train_loss_log, label=\"train loss\", c = \"red\")\n",
    "plt.plot(np.arange(0, num_epochs_trained), val_loss_log, label=\"validation loss\",c = \"orange\")\n",
    "plt.plot(np.arange(0, num_epochs_trained), train_acc_log, label=\"train accuracy\", c = \"blue\")\n",
    "plt.plot(np.arange(0, num_epochs_trained), val_acc_log, label=\"validation accuracy\", c = \"green\")\n",
    "\n",
    "plt.title(\"Learning Curves\")\n",
    "plt.xlabel(\"Epoch number\")\n",
    "plt.ylabel(\"Accuracy/Loss\")\n",
    "plt.ylim([0, 4])\n",
    "plt.yticks(np.arange(0, 4, 0.2))\n",
    "\n",
    "plt.legend()\n",
    "\n",
    "plt.gcf().set_size_inches((12, 10))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Notice that around epoch 3, the validation loss starts to diverge from training loss. Beyond this point, the training loss stagnates and the validation loss increases. As the validation loss is increasing, we are entering the 'overfitting zone'. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  Classification report"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Classification report:\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "         s1       1.00      0.33      0.50         3\n",
      "         s2       1.00      1.00      1.00         1\n",
      "         s3       0.50      0.50      0.50         2\n",
      "         s4       1.00      0.75      0.86         4\n",
      "         s5       1.00      0.33      0.50         3\n",
      "         s6       1.00      1.00      1.00         3\n",
      "         s7       0.00      0.00      0.00         0\n",
      "         s8       1.00      0.33      0.50         6\n",
      "         s9       1.00      1.00      1.00         2\n",
      "        s10       1.00      0.50      0.67         2\n",
      "        s11       0.67      1.00      0.80         2\n",
      "        s12       1.00      0.67      0.80         3\n",
      "        s13       0.00      0.00      0.00         2\n",
      "        s14       1.00      1.00      1.00         1\n",
      "        s15       1.00      1.00      1.00         3\n",
      "        s16       0.00      0.00      0.00         2\n",
      "        s17       0.00      0.00      0.00         0\n",
      "        s18       0.60      1.00      0.75         3\n",
      "        s19       0.00      0.00      0.00         1\n",
      "        s20       0.50      1.00      0.67         1\n",
      "        s21       0.00      0.00      0.00         1\n",
      "        s22       0.33      1.00      0.50         1\n",
      "        s23       1.00      0.67      0.80         3\n",
      "        s24       1.00      0.50      0.67         2\n",
      "        s25       0.00      0.00      0.00         1\n",
      "        s26       0.50      1.00      0.67         1\n",
      "        s27       0.50      0.50      0.50         4\n",
      "        s28       0.50      1.00      0.67         2\n",
      "        s29       0.50      0.50      0.50         2\n",
      "        s30       1.00      1.00      1.00         1\n",
      "        s31       0.00      0.00      0.00         0\n",
      "        s32       1.00      0.67      0.80         3\n",
      "        s33       0.33      1.00      0.50         1\n",
      "        s34       0.00      0.00      0.00         1\n",
      "        s35       0.50      1.00      0.67         1\n",
      "        s36       1.00      0.50      0.67         2\n",
      "        s37       0.50      1.00      0.67         2\n",
      "        s38       1.00      0.50      0.67         4\n",
      "        s39       1.00      0.75      0.86         4\n",
      "\n",
      "avg / total       0.77      0.62      0.64        80\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "from sklearn.metrics import classification_report\n",
    "\n",
    "print(\"Classification report:\")\n",
    "print(classification_report(y_test.argmax(axis=1), y_predicted.argmax(axis=1), target_names = labels_list_faces))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# CNN regularized with dropout"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "tf.reset_default_graph()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### dropout rates 0.20 after pooling and fully connected layers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "EPOCH 0\n",
      "Train accuracy = 0.015625, train loss = 84.85883331298828\n",
      "Validation loss: 71.50835418701172, minimum loss: 71.50835418701172, validation accuracy: 0.02500000037252903\n",
      " \n",
      "EPOCH 1\n",
      "Train accuracy = 0.390625, train loss = 2.4328384399414062\n",
      "Validation loss: 3.370018720626831, minimum loss: 3.370018720626831, validation accuracy: 0.10000000149011612\n",
      " \n",
      "EPOCH 2\n",
      "Train accuracy = 0.9375, train loss = 0.46351537108421326\n",
      "Validation loss: 2.1004791259765625, minimum loss: 2.1004791259765625, validation accuracy: 0.44999998807907104\n",
      " \n",
      "EPOCH 3\n",
      "Train accuracy = 1.0, train loss = 0.04670973867177963\n",
      "Validation loss: 1.1047179698944092, minimum loss: 1.1047179698944092, validation accuracy: 0.762499988079071\n",
      " \n",
      "EPOCH 4\n",
      "Train accuracy = 0.96875, train loss = 0.1319355070590973\n",
      "Validation loss: 1.3851137161254883, minimum loss: 1.1047179698944092, validation accuracy: 0.762499988079071\n",
      " \n",
      "EPOCH 5\n",
      "Train accuracy = 0.765625, train loss = 0.8590461015701294\n",
      "Validation loss: 3.9395031929016113, minimum loss: 1.1047179698944092, validation accuracy: 0.512499988079071\n",
      " \n",
      "EPOCH 6\n",
      "Train accuracy = 0.953125, train loss = 0.3077945411205292\n",
      "Validation loss: 1.5660830736160278, minimum loss: 1.1047179698944092, validation accuracy: 0.5874999761581421\n",
      " \n",
      "EPOCH 7\n",
      "Train accuracy = 0.921875, train loss = 0.35281288623809814\n",
      "Validation loss: 1.497075080871582, minimum loss: 1.1047179698944092, validation accuracy: 0.625\n",
      " \n",
      "EPOCH 8\n",
      "Train accuracy = 0.96875, train loss = 0.10817352682352066\n",
      "Validation loss: 1.9939758777618408, minimum loss: 1.1047179698944092, validation accuracy: 0.637499988079071\n",
      " \n",
      "EPOCH 9\n",
      "Train accuracy = 0.953125, train loss = 0.07447391003370285\n",
      "Validation loss: 1.219191312789917, minimum loss: 1.1047179698944092, validation accuracy: 0.75\n",
      " \n",
      "EPOCH 10\n",
      "Train accuracy = 0.984375, train loss = 0.026992008090019226\n",
      "Validation loss: 1.2246955633163452, minimum loss: 1.1047179698944092, validation accuracy: 0.7250000238418579\n",
      " \n",
      "EPOCH 11\n",
      "Train accuracy = 1.0, train loss = 0.024779517203569412\n",
      "Validation loss: 1.216896653175354, minimum loss: 1.1047179698944092, validation accuracy: 0.7250000238418579\n",
      " \n",
      "EPOCH 12\n",
      "Train accuracy = 0.984375, train loss = 0.03611179441213608\n",
      "Validation loss: 1.1861473321914673, minimum loss: 1.1047179698944092, validation accuracy: 0.75\n",
      " \n",
      "EPOCH 13\n",
      "Train accuracy = 0.984375, train loss = 0.035397350788116455\n",
      "Validation loss: 1.172203540802002, minimum loss: 1.1047179698944092, validation accuracy: 0.75\n",
      " \n",
      "EPOCH 14\n",
      "Train accuracy = 0.984375, train loss = 0.03652079775929451\n",
      "Validation loss: 1.178721308708191, minimum loss: 1.1047179698944092, validation accuracy: 0.75\n",
      " \n",
      "EPOCH 15\n",
      "Train accuracy = 1.0, train loss = 0.0031107773538678885\n",
      "Validation loss: 1.1890451908111572, minimum loss: 1.1047179698944092, validation accuracy: 0.7250000238418579\n",
      " \n",
      "EPOCH 16\n",
      "Train accuracy = 1.0, train loss = 0.006210971623659134\n",
      "Validation loss: 1.1970059871673584, minimum loss: 1.1047179698944092, validation accuracy: 0.7250000238418579\n",
      " \n",
      "EPOCH 17\n",
      "Train accuracy = 1.0, train loss = 0.002818567678332329\n",
      "Validation loss: 1.1980998516082764, minimum loss: 1.1047179698944092, validation accuracy: 0.7250000238418579\n",
      " \n",
      "EPOCH 18\n",
      "Train accuracy = 1.0, train loss = 0.0031443326734006405\n",
      "Validation loss: 1.1979204416275024, minimum loss: 1.1047179698944092, validation accuracy: 0.75\n",
      " \n",
      "EPOCH 19\n",
      "Train accuracy = 1.0, train loss = 0.005659359972923994\n",
      "Validation loss: 1.1936495304107666, minimum loss: 1.1047179698944092, validation accuracy: 0.762499988079071\n",
      " \n",
      "EPOCH 20\n",
      "Train accuracy = 1.0, train loss = 0.00036714182351715863\n",
      "Validation loss: 1.1873855590820312, minimum loss: 1.1047179698944092, validation accuracy: 0.762499988079071\n",
      " \n",
      "EPOCH 21\n",
      "Train accuracy = 1.0, train loss = 0.00045541441068053246\n",
      "Validation loss: 1.18152916431427, minimum loss: 1.1047179698944092, validation accuracy: 0.762499988079071\n",
      " \n",
      "EPOCH 22\n",
      "Train accuracy = 0.984375, train loss = 0.020235618576407433\n",
      "Validation loss: 1.176304578781128, minimum loss: 1.1047179698944092, validation accuracy: 0.762499988079071\n",
      " \n",
      "EPOCH 23\n",
      "Train accuracy = 1.0, train loss = 0.013673831708729267\n",
      "Validation loss: 1.1725008487701416, minimum loss: 1.1047179698944092, validation accuracy: 0.762499988079071\n",
      " \n",
      "EPOCH 24\n",
      "Train accuracy = 1.0, train loss = 0.0017804473172873259\n",
      "Validation loss: 1.1692043542861938, minimum loss: 1.1047179698944092, validation accuracy: 0.762499988079071\n",
      " \n",
      "EPOCH 25\n",
      "Train accuracy = 0.984375, train loss = 0.1056239977478981\n",
      "Validation loss: 1.1663018465042114, minimum loss: 1.1047179698944092, validation accuracy: 0.7749999761581421\n",
      " \n",
      "EPOCH 26\n",
      "Train accuracy = 1.0, train loss = 0.004826284013688564\n",
      "Validation loss: 1.1641829013824463, minimum loss: 1.1047179698944092, validation accuracy: 0.7749999761581421\n",
      " \n",
      "EPOCH 27\n",
      "Train accuracy = 1.0, train loss = 0.0008775836904533207\n",
      "Validation loss: 1.1629257202148438, minimum loss: 1.1047179698944092, validation accuracy: 0.7749999761581421\n",
      " \n",
      "EPOCH 28\n",
      "Train accuracy = 1.0, train loss = 0.0009158747852779925\n",
      "Validation loss: 1.1616790294647217, minimum loss: 1.1047179698944092, validation accuracy: 0.7749999761581421\n",
      " \n",
      "EPOCH 29\n",
      "Train accuracy = 1.0, train loss = 0.0008026254363358021\n",
      "Validation loss: 1.1605560779571533, minimum loss: 1.1047179698944092, validation accuracy: 0.7749999761581421\n",
      " \n",
      "EPOCH 30\n",
      "Train accuracy = 1.0, train loss = 0.0008133347728289664\n",
      "Validation loss: 1.1605275869369507, minimum loss: 1.1047179698944092, validation accuracy: 0.7875000238418579\n",
      " \n",
      "EPOCH 31\n",
      "Train accuracy = 1.0, train loss = 0.0028029424138367176\n",
      "Validation loss: 1.1603666543960571, minimum loss: 1.1047179698944092, validation accuracy: 0.7875000238418579\n",
      " \n",
      "EPOCH 32\n",
      "Train accuracy = 1.0, train loss = 0.003676619380712509\n",
      "Validation loss: 1.1606361865997314, minimum loss: 1.1047179698944092, validation accuracy: 0.7875000238418579\n",
      " \n",
      "EPOCH 33\n",
      "Train accuracy = 1.0, train loss = 0.004119204822927713\n",
      "Validation loss: 1.1609230041503906, minimum loss: 1.1047179698944092, validation accuracy: 0.7875000238418579\n",
      " \n",
      "** EARLY STOPPING ** \n",
      "Training took 21.210164 minutes\n",
      "INFO:tensorflow:Restoring parameters from ./face_rec_CNNmodel_drop1.1\n",
      "Final test accuracy = 0.762499988079071\n"
     ]
    }
   ],
   "source": [
    "dense_drop_rate = 0.20\n",
    "conv_drop_rate = 0.20\n",
    "\n",
    "width = 64\n",
    "height = 64\n",
    "\n",
    "n_features = height*width\n",
    "channels = 1\n",
    "\n",
    "feature_map1 = 300\n",
    "ksize_conv1 = 2\n",
    "stride_conv1 = 1\n",
    "\n",
    "feature_map2 = 300\n",
    "ksize_conv2 = ksize_conv1\n",
    "stride_conv2 = stride_conv1\n",
    "\n",
    "pool_layer_maps2 = feature_map2\n",
    "\n",
    "n_fully_conn1 = 300\n",
    "  \n",
    "X = tf.placeholder(tf.float32, shape=[None, height, width])\n",
    "X_reshaped = tf.reshape(X, shape=[-1, height, width, channels])\n",
    "y = tf.placeholder(tf.int32, shape=[None, n_classes])\n",
    "training_ = tf.placeholder_with_default(False, shape=[])\n",
    "\n",
    "xavier_init = tf.contrib.layers.xavier_initializer()\n",
    "relu_act = tf.nn.relu\n",
    "\n",
    "# ------------------ Convolutional and pooling layers ----------------------------\n",
    "\n",
    "def convolutional_layer(X, filter_, ksize, kernel_init, strides, padding):\n",
    "    convolutional_layer = tf.layers.conv2d(X, filters = filter_, kernel_initializer = kernel_init,\n",
    "                                           kernel_size = ksize, strides = strides,\n",
    "                                          padding = padding, activation = relu_act)\n",
    "    return convolutional_layer\n",
    "\n",
    "def pool_layer(convlayer, ksize, strides, padding, pool_maps):\n",
    "    pool = tf.nn.max_pool(convlayer, ksize, strides, padding)\n",
    "    dim1, dim2 = int(pool.get_shape()[1]), int(pool.get_shape()[2])\n",
    "    pool_flat = tf.reshape(pool, shape = [-1, pool_maps * dim1 * dim2])\n",
    "    return pool_flat\n",
    "\n",
    "conv_layer1 = convolutional_layer(X_reshaped, feature_map1, ksize_conv1, xavier_init, stride_conv1, padding = \"SAME\")\n",
    "\n",
    "conv_layer2 = convolutional_layer(conv_layer1, feature_map2, ksize_conv2, xavier_init, stride_conv2, padding = \"SAME\")\n",
    "\n",
    "pool_layer2_flat = pool_layer(conv_layer2, [1,2,2,1], [1,2,2,1], \"VALID\", pool_layer_maps2)\n",
    "\n",
    "pool_layer_drop = tf.layers.dropout(pool_layer2_flat, conv_drop_rate, training = training_)\n",
    "\n",
    "# ----------------- Fully connected layer -------------------\n",
    "\n",
    "def dense_layer(input_layer, n_neurons, kernel_init, activation):\n",
    "    fully_conn = tf.layers.dense(inputs = input_layer, units = n_neurons, activation = activation,\n",
    "                                kernel_initializer = kernel_init)\n",
    "    return fully_conn\n",
    "        \n",
    "dense_layer1 = dense_layer(pool_layer_drop, n_fully_conn1, xavier_init, relu_act)\n",
    "\n",
    "dense_layer_drop = tf.layers.dropout(dense_layer1, dense_drop_rate, training = training_)\n",
    "\n",
    "#--------------------------------------------------------------\n",
    "\n",
    "logits = tf.layers.dense(dense_layer_drop, n_classes)\n",
    "\n",
    "prediction = tf.nn.softmax(logits)\n",
    "\n",
    "xentropy = tf.nn.softmax_cross_entropy_with_logits(labels = y, logits = logits)\n",
    "loss = tf.reduce_mean(xentropy)\n",
    "\n",
    "optimizer = tf.train.AdamOptimizer(0.001)\n",
    "train_step = optimizer.minimize(loss)\n",
    "\n",
    "correct_preds = tf.equal(tf.argmax(prediction,1), tf.argmax(y, 1))\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_preds, tf.float32))\n",
    "\n",
    "saver = tf.train.Saver()\n",
    "\n",
    "n_epochs = 100\n",
    "batch_size = 64\n",
    "n_train = X_train.shape[0]\n",
    "n_iter = n_train//batch_size\n",
    "path = \"./face_rec_CNNmodel_drop1.1\"\n",
    "\n",
    "train_loss_log, train_acc_log, val_loss_log, val_acc_log = ([] for i in range (4))\n",
    "\n",
    "sess = tf.InteractiveSession()\n",
    "init = tf.global_variables_initializer()\n",
    "init.run()\n",
    "\n",
    "#initialize variables for early stopping\n",
    "min_loss = np.infty\n",
    "epochs_without_improvement = 0 \n",
    "max_epochs_without_improvement = 30\n",
    "\n",
    "start = time()\n",
    "for epoch in range(n_epochs):\n",
    "    for iteration in range(n_iter):\n",
    "        rand_indices = np.random.choice(n_train, batch_size, replace = False)    \n",
    "        X_batch, y_batch = X_train[rand_indices], y_train[rand_indices]\n",
    "        sess.run(train_step, feed_dict={X: X_batch, y: y_batch})\n",
    "        \n",
    "    train_loss, train_acc = sess.run([loss, accuracy], feed_dict={X: X_batch, y: y_batch, training_: True})\n",
    "    train_loss_log.append(train_loss)\n",
    "    train_acc_log.append(train_acc)\n",
    "\n",
    "    val_loss, val_acc, y_pred = sess.run([loss, accuracy, prediction], feed_dict={X: X_test, y: y_test})\n",
    "    val_loss_log.append(val_loss)\n",
    "    val_acc_log.append(val_acc)\n",
    "        \n",
    "    # Early stopping \n",
    "        \n",
    "    if val_loss < min_loss:\n",
    "        save_path = saver.save(sess, path)\n",
    "        min_loss = val_loss\n",
    "        epochs_without_improvement = 0\n",
    "    else:\n",
    "        epochs_without_improvement += 1\n",
    "        if epochs_without_improvement > max_epochs_without_improvement:\n",
    "            print(\"** EARLY STOPPING ** \")\n",
    "            break\n",
    "    print(\"EPOCH {}\".format(epoch))\n",
    "    print(\"Train accuracy = {}, train loss = {}\".format(train_acc, train_loss))\n",
    "    print(\"Validation loss: {}, minimum loss: {}, validation accuracy: {}\".format(val_loss, min_loss, val_acc))\n",
    "    print(\" \")\n",
    "    \n",
    "print(\"Training took %f minutes\"%(float(time() - start)/60.0))\n",
    "\n",
    "saver.restore(sess, path)\n",
    "acc_test = accuracy.eval(feed_dict={X: X_test, y: y_test})\n",
    "print(\"Final test accuracy = {}\".format(acc_test))\n",
    "\n",
    "y_predicted = logits.eval(feed_dict = {X : X_test})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  Inspect learning curves"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtwAAAJwCAYAAAC6d7b8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XtclGXaB/Df88yB45CSeILUPIA6HkA0TS2NXN00lVJp\nXevVbVfdLW211SRTUbdVlBUPaJa1u7lqCWZiR3M3010SczMwwsTMNAVFUwmGg8w8z/P+MTDOcJyB\nYQaZ3/fz2c/LzPPMPdfc8nm75uK671tQFEUBERERERE1CdHdARARERERtWRMuImIiIiImhATbiIi\nIiKiJsSEm4iIiIioCTHhJiIiIiJqQky4iYiIiIiaEBNuIqI7zIULFyCKIo4ePeruUIiIyA5MuImI\nqvjNb36D0aNHuzuMWnXq1AlXrlzB4MGDXfaeH330ER555BG0adMGvr6+6NWrF/7whz/gu+++c1kM\nRER3KibcRETNhMlksus+QRDQtm1bqFSqJo7IbOXKlZgwYQK6d++Offv2IScnB3//+9/h5eWFpUuX\nNmpso9HopCiJiJovJtxERA6SJAnLly9H165d4ePjg759+2Lbtm0292zatAkRERHQ6XTo0KEDpk6d\niitXrliuHzlyBKIo4qOPPsIDDzwAX19f/O1vf8P27duh0Whw9OhRREZGws/PDwMHDsSXX35peW3V\nlpLKx3v27MGECRPg5+eHbt26Yfv27TYxnT9/HqNHj4aPjw+6dOmCV155BQ899BBmzZpV62c9ceIE\nli9fjtWrVyMpKQkPPPAA7rnnHtx///3YsGEDXnvtNZvPk5eXZ/N6jUaDf/7znzZxvvXWWxg3bhx0\nOh1eeukldO7cGfHx8TavKy8vR2BgIP7+979bnktKSkKvXr3g4+ODsLAwrFq1CpIkWa7v378fAwYM\ngJ+fH1q3bo0hQ4bg5MmTtf9DEhG5CBNuIiIH/fa3v0Vqaipef/11nD59GsuWLUNsbCz+8Y9/WO4R\nBAHr1q3DN998g9TUVFy8eBFTp06tNtaCBQsQGxuLb7/9FuPHjwcAyLKMxYsXIykpCRkZGWjbti2e\neOIJyLJsM35VL774IqZPn46srCz86le/wu9+9zucPXvWcj06OhpFRUVIS0vDe++9hw8//BAZGRl1\nftYdO3bAz88P8+fPr/H6XXfdVWdMNYmNjcW0adPwzTff4Nlnn8W0adOwY8cOm3tSU1NRXl6OmJgY\nAMDy5cuRmJiINWvW4PTp09i4cSO2bduGlStXAgDy8/MRExODadOm4dSpUzh27BjmzZsHtVptV0xE\nRE1KISIiGzNmzFB+8Ytf1Hjthx9+UERRVHJycmyeX7lypRIeHl7rmF999ZUiiqKSl5enKIqiHD58\nWBEEQdm1a5fNfW+++aYiiqKSmZlpee6LL75QRFFUzpw5oyiKopw/f14RBEH5/PPPbR5v2LDB8hpJ\nkhSdTqds27ZNURRFOXjwoCKKonLu3DnLPTdu3FB8fX2VmTNn1hr32LFjlf79+9d6vdLhw4cVURSV\n3Nxcm+fVarWyfft2mzj/8pe/2Nxz+vRpRRRF5csvv7Q89+ijjyq//vWvFUVRlJKSEsXX11f55JNP\nbF73z3/+U2nVqpWiKIqSkZGhiKKoXLhwod5YiYhcjV/9iYgc8OWXX0JRFAwcOBCKolieN5lM0Gg0\nlseHDx9GfHw8Tp06hYKCAkt1+sKFC+jQoQMAc0V40KBB1d5DEAT069fP8rhjx45QFAX5+fno0aNH\nrbH179/f8rMoimjbti3y8/MBAN9++y3atGmDe++913JP69atERYWVufnVRTF7sq1vap+5rCwMAwc\nOBA7duxAZGQkrl69ik8++QQffvghACA7OxulpaWYNGmSzeskSUJ5eTmuX7+Ofv36YfTo0dDr9fjF\nL36BkSNH4vHHH0dISIhTYyciagi2lBAROUCWZQiCgPT0dJw8edLyv+zsbEu/8MWLFzFu3Dh07doV\nycnJOHHiBN577z0oioLy8nKb8fz8/Kq9hyiKNklu5c/WLSU10Wq1No8FQai3DaU+YWFhOHv2bL0L\nOkXR/J8T6y8hsizXGHNNn3n69OnYvXs3JEnCW2+9haCgIIwaNcoyDgC88847NnP+zTff4MyZMwgM\nDIQoivj444/x2Wef4b777sPevXsRGhqKjz76yOHPTETkbEy4iYgcEBkZCcBcqe7atavN/yqrx//7\n3/9QVlaG9evX4/7770ePHj1w5coVp1eKHdG7d29cu3YN586dszx38+ZNnDlzps7XPfnkkygpKUFi\nYmKN1wsKCgAAbdu2haIoNosmMzIybBLwukydOhU///wzPv74Y+zYsQNPPvmkZb70ej28vb3x/fff\nV5vzrl272szrwIEDERsbiyNHjmDEiBE2ffVERO7ClhIiohoYDIZqO1x4e3sjLCwMv/nNbzBz5kys\n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\nOgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc5f01ac438>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#plot the training + testing loss and accuracy\n",
    "%matplotlib inline\n",
    "plt.style.use(\"ggplot\")\n",
    "plt.figure()\n",
    "\n",
    "num_epochs_trained = len(train_loss_log)\n",
    "plt.plot(np.arange(0, num_epochs_trained), train_loss_log, label=\"train loss\", c = \"red\")\n",
    "plt.plot(np.arange(0, num_epochs_trained), val_loss_log, label=\"validation loss\",c = \"orange\")\n",
    "plt.plot(np.arange(0, num_epochs_trained), train_acc_log, label=\"train accuracy\", c = \"blue\")\n",
    "plt.plot(np.arange(0, num_epochs_trained), val_acc_log, label=\"validation accuracy\", c = \"green\")\n",
    "\n",
    "plt.title(\"Learning Curves\")\n",
    "plt.xlabel(\"Epoch number\")\n",
    "plt.ylabel(\"Accuracy/Loss\")\n",
    "plt.ylim([0, 4])\n",
    "plt.yticks(np.arange(0, 4, 0.2))\n",
    "\n",
    "plt.legend()\n",
    "\n",
    "plt.gcf().set_size_inches((12, 10))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Classification report"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Classification report:\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "          0       1.00      0.33      0.50         3\n",
      "          1       0.33      1.00      0.50         1\n",
      "          2       1.00      0.50      0.67         2\n",
      "          3       0.80      1.00      0.89         4\n",
      "          4       1.00      0.67      0.80         3\n",
      "          5       1.00      0.67      0.80         3\n",
      "          6       0.00      0.00      0.00         0\n",
      "          7       1.00      0.83      0.91         6\n",
      "          8       0.50      1.00      0.67         2\n",
      "          9       0.67      1.00      0.80         2\n",
      "         10       0.67      1.00      0.80         2\n",
      "         11       1.00      0.67      0.80         3\n",
      "         12       0.00      0.00      0.00         2\n",
      "         13       1.00      1.00      1.00         1\n",
      "         14       1.00      1.00      1.00         3\n",
      "         15       0.00      0.00      0.00         2\n",
      "         17       1.00      1.00      1.00         3\n",
      "         18       1.00      1.00      1.00         1\n",
      "         19       0.50      1.00      0.67         1\n",
      "         20       0.00      0.00      0.00         1\n",
      "         21       0.33      1.00      0.50         1\n",
      "         22       1.00      0.67      0.80         3\n",
      "         23       0.67      1.00      0.80         2\n",
      "         24       0.00      0.00      0.00         1\n",
      "         25       1.00      1.00      1.00         1\n",
      "         26       1.00      0.50      0.67         4\n",
      "         27       1.00      1.00      1.00         2\n",
      "         28       1.00      0.50      0.67         2\n",
      "         29       0.50      1.00      0.67         1\n",
      "         32       1.00      0.67      0.80         3\n",
      "         33       1.00      1.00      1.00         1\n",
      "         34       1.00      1.00      1.00         1\n",
      "         35       0.50      1.00      0.67         1\n",
      "         36       0.50      0.50      0.50         2\n",
      "         37       1.00      1.00      1.00         2\n",
      "         38       1.00      1.00      1.00         4\n",
      "         39       1.00      1.00      1.00         4\n",
      "\n",
      "avg / total       0.83      0.76      0.76        80\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "from sklearn.metrics import classification_report\n",
    "\n",
    "print(\"Classification report:\")\n",
    "print(classification_report(y_test.argmax(axis=1), y_predicted.argmax(axis=1)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  },
  "widgets": {
   "state": {},
   "version": "1.1.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
